//
//  ZYHomeTableViewController.swift
//  weiboZY
//
//  Created by 赵勇 on 16/5/10.
//  Copyright © 2016年 赵勇. All rights reserved.
//

import UIKit

// 定义cell重用标记
private let HomeTableViewCellId = "HomeTableViewCellId"


class ZYHomeTableViewController: ZYVisitorTableViewController {

//    // 获取微博数据
//    var statusList: [ZYStatus]? // 已封装到ViewModel
    
    private lazy var statusListViewModel:ZYStatusListViewModel = ZYStatusListViewModel()
    
    // 上拉加载视图
    private lazy var pullUpView:UIActivityIndicatorView = {
       let view = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        view.color = UIColor.redColor()
        return view
    }()
    
    // 系统下拉刷新
    private lazy var refreshCtr:UIRefreshControl = {
        let ctr = UIRefreshControl()
        return ctr
    }()
    
    
    // 导入的下来刷新
    private lazy var pullDownView:CZRefreshControl = {
        let view = CZRefreshControl()
        return view
    }()
    
    // 添加tip动画
    private lazy var tipLable: UILabel = {
    
        let label = UILabel(textColor: UIColor.whiteColor(), font: 12)
        label.textAlignment = .Center
        label.backgroundColor = UIColor.orangeColor()
        label.text = "hahah"
        label.hidden = true
        return label

    }()
    
    
    override func viewDidLoad() {
        super.viewDidLoad()

        if userLogin {
            setUpTableView()
            setupUI()
           // 网络请求数据刷新界面
            loadStatus()
            
         } else {
            visitorView?.setVisitorInfo(nil, imageName: nil)
        }
        
       
    }
    
    private func endRefreshing(){
        // 关闭动画效果
        pullUpView.stopAnimating()
        // 停止刷新
        refreshCtr.endRefreshing()
        // 自定义
        pullDownView.endRefreshing()
    }
    
    private func loadStatus() {
        // 以下代码已抽取到ViewModel
        //            requestStatus()complete(isSuccess: false)
        // 刷新界面
        
        statusListViewModel.requestStatus(pullUpView.isAnimating(), complete: { (isSuccess, message) -> () in
            if isSuccess {
                
                if !self.pullUpView.isAnimating() {
                    
                    //执行tip动画
                    self.tipAnimation(message)
                }
                

                
                self.endRefreshing()
                
                self.tableView.reloadData()
            }
        })
        
    }
    
    private func setupUI() {
        // tip视图添加到导航栏下面
        if let nav = self.navigationController {
            tipLable.frame = CGRectMake(0, CGRectGetMaxY(nav.navigationBar.frame)-35, tableView.frame.size.width, 35)
            nav.view.insertSubview(tipLable, belowSubview: nav.navigationBar)
        }
        
    }
    
    
    private func tipAnimation(message: String) {
        if tipLable.hidden == false {
            return
        }
        tipLable.text = message
        
        tipLable.hidden = false
        
        UIView.animateWithDuration(1, animations: { () -> Void in
               self.tipLable.transform = CGAffineTransformMakeTranslation(0, self.tipLable.frame.size.height)
            }) { (_) -> Void in
                UIView.animateWithDuration(1, animations: { () -> Void in
                    self.tipLable.transform = CGAffineTransformIdentity
                    }, completion: { (_) -> Void in
                     self.tipLable.hidden = true
                })
        }
        
        
     
    }
    
    // 注册table 
    private func setUpTableView () {
        // 获取class  UITableViewCell.self
        tableView.registerClass(ZYStatusTableViewCell.self, forCellReuseIdentifier: HomeTableViewCellId)
        // 设置tableView的行高
        // 自动计算行高
        tableView.rowHeight = UITableViewAutomaticDimension
        // 设置预估高度
        tableView.estimatedRowHeight = 200
//        tableView.rowHeight = 200
        // 去掉分割线
        tableView.separatorStyle = .None
        // 设置加载更多视图
        tableView.tableFooterView = pullUpView
        // 设置大小
        pullUpView.sizeToFit()
        // 添加系统的下拉刷新的第一种方式
//        self.refreshControl = refreshCtr
        // 添加下来刷新的第二种方式
//        tableView.addSubview(refreshCtr)
        // 添加自定义的下来刷新
        tableView.addSubview(pullDownView)
         pullDownView .addTarget(self, action: "pullDownRefresh", forControlEvents: .ValueChanged)
        
        // 添加方法
//        refreshCtr .addTarget(self, action: "pullDownRefresh", forControlEvents: .ValueChanged)
        
        // 自定义下拉控件
//        tableView.addSubview(ZYRefreshControl())

    }
    
    
     @objc private func pullDownRefresh() {
        
        self.loadStatus()
        
//        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), { () -> Void in
//            
//            self.loadStatus()
//            
//            // 结束刷新
//            
//            self.refreshCtr.endRefreshing()
//            
//
//        })
        
    }
    
    
//    // 获取微博数据
//    private func requestStatus() {
//        
//    ZYNetWorkTools.sharedTool.requestStatus(ZYUserAccountViewModel.sharedUserAccount.accessToken!) { (response, error) -> () in
//        
//        if error != nil {
//            print("数据请求异常")
//            return
//        }
//        
//        // 代码执行到此 数据请求成功
//        guard let dict = response as? [String:AnyObject] else {
//            print("数据不是字典格式")
//            return
//        }
//        
//        guard let statusArray = dict["statuses"] as? [[String:AnyObject]] else {
//            print("数据不是字典格式")
//            return
//        }
//        
//        // 遍历数组初始化模型
//        
//        var tempArray = [ZYStatus]()
//        for value in statusArray {
//            
//            let status = ZYStatus(dict: value)
//            tempArray.append(status)
//            
//        }
//        // 刷新数据
//        self.statusList = tempArray
//        self.tableView.reloadData()
//        
//        }
//        
//        
//    }
    
 

}

// 数据源的代理方法
extension ZYHomeTableViewController {
    
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusListViewModel.statusList?.count ?? 0
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCellWithIdentifier(HomeTableViewCellId, forIndexPath: indexPath) as! ZYStatusTableViewCell
        
        cell.statusViewModel = statusListViewModel.statusList![indexPath.row]
        
        // 去掉选中颜色
        cell.selectionStyle = .None
        
        return cell
    }
    
    // 将要显示的cell
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        print(indexPath.row)
        
        if indexPath.row == statusListViewModel.statusList!.count - 1 && !pullUpView.isAnimating() {
            
            print("最后一条数据")
            // 开始动画
            pullUpView.startAnimating()
            // 数据请求
            loadStatus()
 
        }
    }
    
    
}

















